[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
この記事では、Scala 3にて廃止予定のdo-while文について解説します。
do-whileは廃止予定
Scala 3以降では、do-while文はサポートされなくなりました。
do-while文は、例えば以下のような文です。
var i = 0 do { i += 1 println(i) } while (i < 10)
Scala 2系ではこのような書き方ができました。
do-whileが廃止となる理由
do-while文は、JavaからScalaへと移行するユーザーに対して、これをスムーズにするために導入、維持されてきました。
とはいえ、do-while文が使用されることは滅多にありません。Javaから移行してくるユーザーですら、今となってはdo-while文やwhile文を使っている例は多くありません。
また、do-while文と同じ処理は通常のwhile文で表現できます。
したがって、do-while文を別の構文として維持しておくことにほとんど意味がありませんでした。
さらに、Scala 3の新しい制御構文の下ではdo
が別の用途に使用されることになったので、do-while文が廃止されることとなったわけです。
whileで書き換えればOK
代わりに、while
ループを使用しましょう。
上述の例は以下のように書きます。
var i = 0 while ({ i += 1 println(i) i < 10 }) ()
Scala 3の新しい構文ルールの下では、このコードは次のように括弧 ({...})
を付けずに書くことができます。
var i = 0 while { i += 1 println(i) i < 10 } do ()
ブロックを当座の条件として使うと、重複コードが発生せずに済みます。例えば、以下のようになります。
val iterator = Iterator[Int](5, 4, 3, 2, 1, 0, -1, -2, -3) while { val x: Int = iterator.next x >= 0 } do print(".")
移行はScala 3.0にアップデートしてからでOK
do-while文はScala 3.0でも使用することができます。
3.0においてdo-while文で書くと、通常ではコンパイルエラーになります。
しかし移行オプション3.0-migration
を設定すると、以前と同様に使用することができます。
さらに、移行オプション3.0-migration
を設定している際にコンパイラオプション-rewrite
を設定すると、自動でwhile
文に書き換えてもらえます。
移行オプションについてはこちらの記事をご覧ください。
便利ですので、移行は3.0へのアップデート後に行うことをおすすめします。